From: Jonas Dreßler Date: Sun, 27 Oct 2019 21:28:38 +0000 (+0100) Subject: popupMenu: Don't chain up vfuncs if the parent doesn't implement them X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~781^2^2~497 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=c35b4cede58142797b1f6b04a4e2e7eaa938234a;p=gnome-shell.git popupMenu: Don't chain up vfuncs if the parent doesn't implement them Some vfuncs like `button_press_event`, `button_release_event` and `touch_event` don't have handlers in the parent classes of PopupBaseMenuItem. So don't call those handlers and return the default Clutter.EVENT_PROPAGATE there. This fixes a crash of the shell that happens when pressing a mouse button inside the system popup menu and releasing it above a slider like the volume slider again. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/787 --- diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js index 062b2bf9e..fb954cda1 100644 --- a/js/ui/popupMenu.js +++ b/js/ui/popupMenu.js @@ -118,18 +118,18 @@ var PopupBaseMenuItem = GObject.registerClass({ this._parent = parent; } - vfunc_button_press_event(buttonEvent) { + vfunc_button_press_event() { if (!this._activatable) - return super.vfunc_button_press_event(buttonEvent); + return Clutter.EVENT_PROPAGATE; // This is the CSS active state this.add_style_pseudo_class('active'); return Clutter.EVENT_PROPAGATE; } - vfunc_button_release_event(buttonEvent) { + vfunc_button_release_event() { if (!this._activatable) - return super.vfunc_button_release_event(buttonEvent); + return Clutter.EVENT_PROPAGATE; this.remove_style_pseudo_class('active'); this.activate(Clutter.get_current_event()); @@ -138,7 +138,7 @@ var PopupBaseMenuItem = GObject.registerClass({ vfunc_touch_event(touchEvent) { if (!this._activatable) - return super.vfunc_touch_event(touchEvent); + return Clutter.EVENT_PROPAGATE; if (touchEvent.type == Clutter.EventType.TOUCH_END) { this.remove_style_pseudo_class('active');